package org.blogwu.learn.designpattern.chapter17.v2;

/**
 *
 */
public abstract class CaffeineBeverage {

    //算法。 抽象类的算法是final 的不允许被子类修改
    public final void prepareRecipe() {

        //算法的具体步骤
        boilWater(); //烧水
        brew();//  加入 待冲泡原料
        pourInCup();// 把沸水倒入杯子
        if (hook()) {
            addCondiments();// 加调料
        }

    }

    public abstract void brew();

    public abstract void addCondiments();


    public void boilWater() {

        System.out.println("烧水");
    }


    public void pourInCup() {
        System.out.println("把沸水倒入杯子");
    }

    /**
     * 钩子，具体实现可以对算法步骤做一些控制
     *
     * @return
     */
    public boolean hook() {
        return true;
    }
}